package com.cskaoyan.javase.oop2._1extends._9final._2method;

/**
 * @description: final修饰方法
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 *  final修饰方法表示最后的方法,最终的方法,表示该方法无法被重写(不是无法被继承,而是可以继承)
 *  语法(针对成员方法):
 *        [访问权限修饰符] final 返回值类型 方法名(形参列表){
 *            //方法体
 *        }
 *
 * 注意事项:
 *      1.final修饰成员方法,表示该方法无法被重写,但是仍然是可以继承的
 *      2.什么样的成员方法应该设置为final?
 *          1.方法设计比较完善,不需要子类进行修改了,子类只需要使用父类的方法即可
 *          2.即便是父类的方法不是很完善,但是父类不需要该方法实现被修改(如果你想修改,自己写一个,不要修改原本的实现)
 *      3.程序员还是比较少把方法设置成final修饰的,主要还是见于jdk中的源码
 *      4.final在修饰方法时,和某些方法相性不合(不能同时使用):
 *          a.private方法,本来就无法重写,不需要多此一举
 *          b.static方法,本来就无法重写,不需要多此一举
 *          c.构造方法,不能被继承,更不能重写,将构造方法加final会报错
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        s.test();

    }
}

class Father {
    public final void test() {
    }

    //'private' method declared 'final'
    private final void eat() {
        System.out.println("吃饭");
    }

    public Father() {

    }
}

class Son extends Father {
    //'test()' cannot override 'test()' in 'com.cskaoyan.javase.oop2._1extends._9final._2method.Father'; overridden method is final
    /*@Override
    public void test() {
        super.test();
    }*/

    /*@Override
    public void eat() {
        System.out.println("老八的吃法");
    }*/
}